// Map gradient class to its primary color
const gradientPrimaryColors = {
"bg-gradient-blue": "#113253",
"bg-gradient-purple": "#6365B5",
"bg-gradient-green": "#1781C3",
"bg-gradient-orange": "#FF9800",
"bg-gradient-dark-purple": "#380F59",
"bg-gradient-teal": "#4facfe",
"bg-gradient-indigo": "#490552",
"bg-gradient-cyan": "#74b9ff"
};
// After your cards are rendered in the DOM:
function setButtonTextColor() {
document.querySelectorAll('.new-digi-card').forEach(card => {
let btn = card.querySelector('.new-digi-card-btn');
if (!btn) return;
let found = Object.entries(gradientPrimaryColors).find(([cls]) => card.classList.contains(cls));
if (found) {
btn.style.setProperty('color', found[1], 'important');
} else {
btn.style.setProperty('color', '#105df6', 'important'); // fallback color
}
});
}
// Call this after rendering cards
// Load education data from assets
async function loadEducationData() {
try {
await new Promise(resolve => setTimeout(resolve, 1200)); // Optional delay
const response = await fetch('assets/landing/university_data.json');
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Error loading data:', error);
throw error;
}
}
// Create individual card HTML
function createCard(data) {
return `
${universityName}
Card ID: ${cardId}
`;
document.body.insertAdjacentHTML('beforeend', toastHTML);
const toastElement = document.querySelector('.toast:last-child');
const toast = new bootstrap.Toast(toastElement, { autohide: true, delay: 3000 });
toast.show();
toastElement.addEventListener('hidden.bs.toast', () => {
toastElement.remove();
});
console.log('Card clicked:', { cardId, universityName });
}
// Initialize app
async function initCarousel(containerId) {
try {
const data = await loadEducationData();
renderCards(data, containerId);
} catch (error) {
console.error('Failed to initialize:', error);
document.getElementById('loading').style.display = 'none';
document.getElementById('error').classList.remove('d-none');
}
}
// Start on DOM ready
document.addEventListener('DOMContentLoaded', () => {
initCarousel('cards-container'); // Pass container ID
// Optional: hover effect
document.addEventListener('mouseover', (e) => {
if (e.target.matches('button[id$="-btn"]')) {
e.target.style.background = 'rgba(255,255,255,0.3)';
e.target.style.transform = 'scale(1.05)';
}
});
document.addEventListener('mouseout', (e) => {
if (e.target.matches('button[id$="-btn"]')) {
e.target.style.background = 'rgba(255,255,255,0.2)';
e.target.style.transform = 'scale(1)';
}
});
});
document.addEventListener('click', (e) => {
const card = e.target.closest('.uni-card');
if (card && card.dataset.url) {
window.location.href = card.dataset.url;
}
});
function redirectCard(card) {
const url = card.getAttribute('data-url');
if (url) {
window.location.href = url;
}
}
function attachCardClickHandlers() {
document.querySelectorAll('.new-digi-card').forEach(card => {
card.addEventListener('click', function (event) {
const url = card.getAttribute('data-url');
if (url) {
window.location.href = url;
}
});
});
}
window.addEventListener("load", function () {
const lazyImages = document.querySelectorAll("img.lazy-image");
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
// const src = img.getAttribute("data-src");
const src = img.getAttribute("data-src")?.replace(/^src:/, "https:").replace(/["']/g, "");
if (src) {
img.src = src;
img.onload = () => {
img.classList.add("loaded");
};
observer.unobserve(img);
}
}
});
}, {
rootMargin: "100px",
threshold: 0.01
});
lazyImages.forEach(img => {
observer.observe(img);
});
setTimeout(() => {
$('.owl-carousel').each(function () {
//Find each set of dots in this carousel
$(this).find('.owl-dot').each(function (index) {
//Add one to index so it starts from 1
$(this).attr('aria-label', index + 1);
});
});
}, 1500);
});